package com.sunway.resource2es.util;

import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.ZipUtil;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * MyStrUtil
 *
 * @author lxw
 * @version V1.0
 * @date 2024/11/12 9:52
 */
public class MyStrUtil {

    /**
     * 字段按 || 分隔，不做任何处理
     *
     * @param str 带分割字符串
     * @return java.util.List<java.lang.String>
     * @author lxw
     * @date 2024/11/13 14:35
     **/
    public static List<String> str2List(String str) {
        if (StringUtils.isBlank(str)) {
            return new ArrayList<>();
        }
        return List.of(str.split("\\|\\|"));
    }

    /**
     * 字段按 || 分隔，并去掉空串，保留重复
     *
     * @param str 带分割字符串
     * @return java.util.List<java.lang.String>
     * @author lxw
     * @date 2024/11/13 14:35
     **/
    public static List<String> str2ListAllowRepeat(String str) {
        if (StringUtils.isBlank(str)) {
            return new ArrayList<>();
        }
        return Arrays.stream(str.split("\\|\\|")).filter(StringUtils::isNotBlank).toList();
    }

    /**
     * 字段按 || 分隔，并去掉空串，去掉重复数据
     *
     * @param str 带分割字符串
     * @return java.util.List<java.lang.String>
     * @author lxw
     * @date 2024/11/13 14:35
     **/
    public static List<String> str2ListNotRepeat(String str) {
        if (StringUtils.isBlank(str)) {
            return new ArrayList<>();
        }
        return Arrays.stream(str.split("\\|\\|")).filter(StringUtils::isNotBlank).distinct().toList();
    }


    /**
     * 压缩字符串
     *
     * @param toGzip 带压缩字符串
     * @return java.lang.String
     **/
    public static String gzip(String toGzip) {
        return Base64.encode(ZipUtil.gzip(toGzip, CharsetUtil.CHARSET_UTF_8.name()));
    }

    /**
     * 解压字符串
     *
     * @param toUnGzip 带解压字符串
     * @return java.lang.String
     * @author lxw
     * @date 2025/1/6 16:50
     **/
    public static String unGzip(String toUnGzip) {
        byte[] decode = Base64.decode(toUnGzip);
        return ZipUtil.unGzip(decode, CharsetUtil.CHARSET_UTF_8.name());
    }
}
